home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / Book Chapters / Appendix A - Top Speed / MoveData / MoveData.c < prev    next >
C/C++ Source or Header  |  1995-03-12  |  3KB  |  120 lines

  1. #include <stdio.h>
  2.  
  3. #define kLoopNumber 100
  4.  
  5.  
  6. /* Standard inits */
  7.  
  8. static void InitToolbox(void) {
  9.     InitGraf (&qd.thePort);
  10.     InitFonts ();
  11.     FlushEvents (everyEvent,0);
  12.     InitWindows ();
  13.     InitMenus ();
  14.     TEInit ();
  15.     InitDialogs (nil);
  16.     InitCursor ();
  17. } /*InitToolbox*/
  18.  
  19.  
  20. #define    kBlockSize    100000L
  21.  
  22.  
  23. void main(void)
  24. {
  25.     long    timeBefore,timeAfter;
  26.     long    loop, memLoop, memLoopLimit;
  27.     Ptr        sourcePtr, destinationPtr;
  28.     char    *charSourcePtr, *charDestPtr;
  29.     short    *shortSourcePtr, *shortDestPtr;
  30.     long    *longSourcePtr, *longDestPtr;
  31.     
  32.     InitToolbox();
  33.     
  34.     sourcePtr = NewPtr(kBlockSize);
  35.     destinationPtr = NewPtr(kBlockSize);
  36.     if (sourcePtr == nil || destinationPtr == nil)
  37.     {
  38.         printf("Couldn't allocate memory.");
  39.     }
  40.     else
  41.     {
  42.         memLoopLimit = kBlockSize / sizeof(char) / 16;
  43.         timeBefore = TickCount();
  44.         for (loop = 0; loop < kLoopNumber; loop++)
  45.         {
  46.             charSourcePtr = sourcePtr;
  47.             charDestPtr = destinationPtr;
  48.             for (memLoop = 0; memLoop < memLoopLimit; memLoop++)
  49.             {
  50.                 *charDestPtr++ = *charSourcePtr++;
  51.                 *charDestPtr++ = *charSourcePtr++;
  52.                 *charDestPtr++ = *charSourcePtr++;
  53.                 *charDestPtr++ = *charSourcePtr++;
  54.                 *charDestPtr++ = *charSourcePtr++;
  55.                 *charDestPtr++ = *charSourcePtr++;
  56.                 *charDestPtr++ = *charSourcePtr++;
  57.                 *charDestPtr++ = *charSourcePtr++;
  58.                 *charDestPtr++ = *charSourcePtr++;
  59.                 *charDestPtr++ = *charSourcePtr++;
  60.                 *charDestPtr++ = *charSourcePtr++;
  61.                 *charDestPtr++ = *charSourcePtr++;
  62.                 *charDestPtr++ = *charSourcePtr++;
  63.                 *charDestPtr++ = *charSourcePtr++;
  64.                 *charDestPtr++ = *charSourcePtr++;
  65.                 *charDestPtr++ = *charSourcePtr++;
  66.             }
  67.         }
  68.         timeAfter = TickCount();
  69.         printf("Chars: %ld ticks for %ld copies.\n", timeAfter-timeBefore, (long)kLoopNumber);
  70.  
  71.  
  72.         memLoopLimit = kBlockSize / sizeof(short) / 8;
  73.         timeBefore = TickCount();
  74.         for (loop = 0; loop < kLoopNumber; loop++)
  75.         {
  76.             shortSourcePtr = (short *) sourcePtr;
  77.             shortDestPtr = (short *) destinationPtr;
  78.             for (memLoop = 0; memLoop < memLoopLimit; memLoop++)
  79.             {
  80.                 *shortDestPtr++ = *shortSourcePtr++;
  81.                 *shortDestPtr++ = *shortSourcePtr++;
  82.                 *shortDestPtr++ = *shortSourcePtr++;
  83.                 *shortDestPtr++ = *shortSourcePtr++;
  84.                 *shortDestPtr++ = *shortSourcePtr++;
  85.                 *shortDestPtr++ = *shortSourcePtr++;
  86.                 *shortDestPtr++ = *shortSourcePtr++;
  87.                 *shortDestPtr++ = *shortSourcePtr++;
  88.             }
  89.         }
  90.         timeAfter = TickCount();
  91.         printf("Shorts: %ld ticks for %ld copies.\n", timeAfter-timeBefore, (long)kLoopNumber);
  92.  
  93.  
  94.         memLoopLimit = kBlockSize / sizeof(long) / 4;
  95.         timeBefore = TickCount();
  96.         for (loop = 0; loop < kLoopNumber; loop++)
  97.         {
  98.             longSourcePtr = (long *) sourcePtr;
  99.             longDestPtr = (long *) destinationPtr;
  100.             for (memLoop = 0; memLoop < memLoopLimit; memLoop++)
  101.             {
  102.                 *longDestPtr++ = *longSourcePtr++;
  103.                 *longDestPtr++ = *longSourcePtr++;
  104.                 *longDestPtr++ = *longSourcePtr++;
  105.                 *longDestPtr++ = *longSourcePtr++;
  106.             }
  107.         }
  108.         timeAfter = TickCount();
  109.         printf("Longs: %ld ticks for %ld copies.\n", timeAfter-timeBefore, (long)kLoopNumber);
  110.  
  111.  
  112.         timeBefore = TickCount();
  113.         for (loop = 0; loop < kLoopNumber; loop++)
  114.             BlockMove(sourcePtr, destinationPtr, kBlockSize);
  115.         timeAfter = TickCount();
  116.         printf("BlockMove: %ld ticks for %ld copies.\n", timeAfter-timeBefore, (long)kLoopNumber);
  117.  
  118.     }
  119. } /*main*/
  120.